#include <stdarg.h>

#include <linux/kernel.h>

static char buf[1024];

extern int vsprintf(char * buf, const char * fmt, va_list args);

int printk(const char *fmt, ...)
{
    va_list args;
    int i;

    va_start(args, fmt);
    i = vsprintf(buf, fmt, args);
    va_end(args);
    __asm__("push %%fs\n\t"
        "push %%ds\n\t"
        "pop %%fs\n\t"      // fs = ds
        "pushl %0\n\t"      // 字符串长度
        "pushl $buf\n\t"
        "pushl $0\n\t"      // tty0
        "call tty_write\n\t"
        "addl $8, %%esp\n\t"
        "popl %0\n\t"
        "pop %%fs"
        ::"r"(i));
    return i;
}
